
//--Enable CLR
//1.exec sp_configure 'clr enabled', 1
//1.reconfigure with override
//1.--Enable Trustworthy computing
//1.--This allows us to create unsupported assemblies
//1.alter database DemoDB
//1.set trustworthy  on
//1.use master
//1.GRANT unsafe ASSEMBLY TO [WIN2K3R2EE\Administrator]
//1.ALTER AUTHORIZATION on database::demodb to [WIN2K3R2EE\Administrator]
//1.--This assembly allows us to use WMI in CLR functions and procs.
//1.use DemoDB
//1.go
//1.CREATE ASSEMBLY [System.Management]
//1.AUTHORIZATION [dbo]
//1.FROM 'C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Management.dll'
//1.WITH PERMISSION_SET = UNSAFE
//Copy and add this code to a VB database project stored proc in VS2005\2008. 

Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.SqlTypes
Imports System.Management
Imports Microsoft.SqlServer.Server  

Partial Public Class StoredProcedures     
  Public Shared Sub pnetWMI(ByVal sComputer As String, ByVal sWQL As String _ , ByVal sCounter As String)        
        Try              
            Dim searcher As New ManagementObjectSearcher( _               
            "\\" & sComputer & "\root\CIMV2", _                
                sWQL)            

            For Each queryObj As ManagementObject In searcher.Get()                 Dim record As New SqlDataRecord( _                New SqlMetaData(sCounter, SqlDbType.VarChar, 100))                 SqlContext.Pipe.SendResultsStart(record)                 record.SetString(0, queryObj(sCounter))                SqlContext.Pipe.SendResultsRow(record)            Next            SqlContext.Pipe.SendResultsEnd()        Catch ex As Exception            Dim sp As SqlPipe = SqlContext.Pipe()            sp.Send(ex.Message)        End Try    End SubEnd Class 


In visual studio project properties, add a database connection to your db, add a reference to system.management, set to unsafe and deploy. 

 
 
Here are a few sample executions but of course and any perfmon counter should work:
 
exec pnetWMI 'localhost', 'select AvgDiskQueueLength from Win32_PerfFormattedData_PerfDisk_PhysicalDisk where name = ''_Total''', 'AvgDiskQueueLength'
 
exec pnetWMI 'localhost', 'select PercentProcessorTime from Win32_PerfFormattedData_PerfOS_Processor where name = ''_Total''', 'PercentProcessorTime' 